package main

import "fmt"

type Point struct {
	x, y int
}

func test(p *Point) *Point {
	fmt.Printf("test: %T %[1]v %p ~~~~~~\n", p, p)
	p.x = 2000
	fmt.Printf("test: %T %[1]v %p ~~~~~~\n", p, p)
	return p
}

func main() {
	p1 := Point{4, 5}
	fmt.Printf("p1: %T %[1]v %p \n", p1, &p1)
	// p2 := p1
	// fmt.Printf("p2: %T %[1]v %p \n", p2, &p2)
	// p3 := &p1
	// fmt.Printf("p3: %T %[1]v %p \n", p3, &p3)
	// p4 := p3 //p4的类型是? *Point 大整数
	// fmt.Printf("p4: %T %[1]v %p \n", p4, &p4)
	// // test(p1)
	// fmt.Printf("p1: %T %[1]v %p \n", p1, &p1)
	// fmt.Println("~~~~~~~~~~~~~~~~~~~~~~~~")
	p5 := test(&p1)
	fmt.Printf("p1: %T %[1]v %p \n", p1, &p1)
	fmt.Printf("p5: %T %[1]v %p \n", p5, p5)
	p5.y = 111
	fmt.Printf("p1: %T %[1]v %p \n", p1, &p1)
	fmt.Printf("p5: %T %[1]v %p \n", p5, p5)
}
